<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Binh
 * Date: 12/19/13
 * Time: 2:52 PM
 * To change this template use File | Settings | File Templates.
 */
namespace Model;
use \DB;

class Song extends \Model{
    //Lấy danh sách tất cả bài hát
    //Kết quả trả về array(array( 'SONG_ID', 'SONG_NAME', 'SINGER_NAME', 'AUTHOR_NAME', 'GENRE_NAME', 'USER_NAME',
    //'song.View','FAVORITE', 'DATE_UPLOAD', 'LYRICS', 'PATH'))
    public static function get_all(){
        $columns = array('SONG_ID', 'SONG_NAME', 'SINGER_NAME', 'AUTHOR_NAME', 'GENRE_NAME', 'USER_NAME', 'song.View','FAVORITE', 'DATE_UPLOAD', 'LYRICS', 'PATH');

        $query = DB::select_array($columns)->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->join('author')->on('song.AUTHOR_ID','=','author.AUTHOR_ID');
        $query->join('genre')->on('song.GENRE_ID','=','genre.GENRE_ID');
        $query->join('user')->on('song.UPLOADER_ID','=','user.USER_ID');

        return $query->execute()->as_array();
    }

    //Lấy bài hát theo tên bài hát
    //Thông số đầu vào $SONG_ID
    //Kết quả trả về array( array( SONG_NAME,SINGER_NAME,AUTHOR_NAME, GENRE_NAME, USER_NAME, song.VIEW,
    //FAVORITE, DATE_UPLOAD, LYRICS, PATH))
    public static function get_id($SONG_ID){
        $columns = array('SONG_ID','SONG_NAME','song.SINGER_ID','SINGER_NAME','AUTHOR_NAME','GENRE_NAME','USER_NAME','song.VIEW','FAVORITE','DATE_UPLOAD','LYRICS','PATH');

        $query = DB::select_array($columns)->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->join('author')->on('song.AUTHOR_ID','=','author.AUTHOR_ID');
        $query->join('genre')->on('song.GENRE_ID','=','genre.GENRE_ID');
        $query->join('user')->on('song.UPLOADER_ID','=','user.USER_ID');
        $query->where('SONG_ID','=',$SONG_ID);

        return $query->limit(1)->execute()->as_array()[0];
    }

    //Lấy bài hát theo tên bài hát
    //Thông số đầu vào $SONG_NAME
    //Kết quả trả về array( array(SONG_ID, SINGER_NAME, AUTHOR_NAME, GENRE_NAME, USER_NAME,
    //song.VIEW, FAVORITE, DATE_UPLOAD, LYRICS, PATH) )
    public static function get_name($SONG_NAME){
        $columns = array('SONG_ID', 'SONG_NAME','song.SINGER_ID', 'SINGER_NAME','AUTHOR_NAME','GENRE_NAME','USER_NAME','song.VIEW','FAVORITE','DATE_UPLOAD','LYRICS','PATH');

        $query = DB::select_array($columns)->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->join('author')->on('song.AUTHOR_ID','=','author.AUTHOR_ID');
        $query->join('genre')->on('song.GENRE_ID','=','genre.GENRE_ID');
        $query->join('user')->on('song.UPLOADER_ID','=','user.USER_ID');
        $query->where('SONG_NAME','=',$SONG_NAME);
        $data = $query->limit(1)->execute()->as_array();
        if(count($data) > 0){
            if( $data[0]['LYRICS'] == null){
                $data[0]['LYRICS'] = 'Updating';
            }
            return $data[0];//tra ve record can tim
        }
        else{
            return $data;// tran ve array = ()
        }
    }

    //Cập nhật lượt view
    //Thông só đầu vào $SONG_NAME
    public static function update_view($SONG_NAME){
        $song_name = ucwords($SONG_NAME);
        $data = DB::select()->from('song')->where('SONG_NAME','=', $song_name)->execute()->as_array();
        if(count($data) > 0){
            $view = $data[0]['VIEW'] + 1;
            if(mt_rand(1, 12) == 1){
                DB::update('song')->set('VIEW', '=', $view)->where('SONG_NAME', '=', $song_name)->execute();
            }
        }
    }

    //Lấy 10 bài được update gần nhất
    //Kết quả trả ra array( array(SONG_ID, SONG_NAME, SINGER_NAME, AUTHOR_ID, GENRE_ID, USER_ID,
    //VIEW, FAVORITE, DATE_UPLOAD, LYRICS, PATH) )
    public static function get_new_song(){
        $query = DB::select()->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->order_by('DATE_UPLOAD', 'desc');
        $data = $query->limit(10)->execute()->as_array();

        return $data;
    }

    //Lấy những bài hát top việt được nghe nhiều nhất
    //Kết quả trả về array( array(SONG_ID, SONG_NAME, SINGER_NAME, AUTHOR_ID, GENRE_ID, USER_ID,
    //VIEW, FAVORITE, DATE_UPLOAD, LYRICS, PATH) )
    public static function get_top_vn($limit=5){
        $query = DB::select()->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->where('song.GENRE_ID','in', array(5,6,7));
        $query->order_by('VIEW','desc');
        $data = $query->limit($limit)->execute()->as_array();
        return $data;
    }

    //Lấy những bài hát top nuoc ngoai được nghe nhiều nhất
    //Kết quả trả về array( array(SONG_ID, SONG_NAME, SINGER_NAME, AUTHOR_ID, GENRE_ID, USER_ID,
    //VIEW, FAVORITE, DATE_UPLOAD, LYRICS, PATH)
    public static function get_top_ngoai($limit=5){
        $query = DB::select()->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->where('song.GENRE_ID','in', array(1,2,3,4));
        $query->order_by('VIEW','desc');
        $data = $query->limit(5)->execute()->as_array();

        return $data;
    }

    //Lấy những bài hát mà ca si đó hát
    //Thông số vào $SINGER_ID
    //Thông số ra danh sách bài hat
    public static function get_singer_id($SINGER_ID){
        $columns = array('SONG_ID', 'SONG_NAME', 'song.SINGER_ID','SINGER_NAME', 'AUTHOR_NAME', 'GENRE_NAME', 'USER_NAME', 'song.VIEW', 'FAVORITE', 'DATE_UPLOAD', 'LYRICS', 'PATH');
        $query = DB::select_array($columns)->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->join('author')->on('song.AUTHOR_ID','=','author.AUTHOR_ID');
        $query->join('genre')->on('song.GENRE_ID','=','genre.GENRE_ID');
        $query->join('user')->on('song.UPLOADER_ID','=','user.USER_ID');
        $query->where('song.SINGER_ID', '=', $SINGER_ID);
        $data = $query->execute()->as_array();

        return $data;
    }

    //Lấy những bài hát mà thuộc loại bài nay
    //Thông số vào $genre
    //Kết quả trả về là danh sách các bài hát
    public static function get_genre_id($id){
        $columns = array('SONG_ID', 'SONG_NAME', 'song.SINGER_ID','SINGER_NAME', 'AUTHOR_NAME', 'GENRE_NAME', 'USER_NAME', 'song.VIEW', 'FAVORITE', 'DATE_UPLOAD', 'LYRICS', 'PATH');

        $query = DB::select_array($columns)->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->join('author')->on('song.AUTHOR_ID','=','author.AUTHOR_ID');
        $query->join('genre')->on('song.GENRE_ID','=','genre.GENRE_ID');
        $query->join('user')->on('song.UPLOADER_ID','=','user.USER_ID');
        $query->where('song.GENRE_ID', '=', $id);

        return $query->execute()->as_array();
    }
    //Tra cứu bài hát theo ten, ca sĩ, tác giả, thể loại, ngay upload
    //Giá trị nhập vào $string
    //Kết quả trả về array(array('SONG_ID', 'SONG_NAME', 'SINGER_NAME', 'AUTHOR_NAME', 'GENRE_NAME', 'USER_NAME', 'song.VIEW', 'FAVORITE', 'DATE_UPLOAD', 'LYRICS', 'PATH'))
    public static function search_char($string=""){
        $chars = '%'.$string.'%';
        $columns = array('SONG_ID', 'SONG_NAME', 'SINGER_NAME', 'AUTHOR_NAME', 'GENRE_NAME', 'USER_NAME', 'song.VIEW', 'FAVORITE', 'DATE_UPLOAD', 'LYRICS', 'PATH');

        $query = DB::select_array($columns)->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->join('author')->on('song.AUTHOR_ID','=','author.AUTHOR_ID');
        $query->join('genre')->on('song.GENRE_ID','=','genre.GENRE_ID');
        $query->join('user')->on('song.UPLOADER_ID','=','user.USER_ID');
        $query->where('SONG_NAME', 'like', $chars);
        $query->or_where('SINGER_NAME', 'like', $chars);
        $query->or_where('AUTHOR_NAME', 'like', $chars);
        $query->or_where('GENRE_NAME', 'like', $chars);
        $query->or_where('DATE_UPLOAD', 'like', $chars);

        return $query->execute()->as_array();
    }

    //Tra cứu bài hát theo tên bài hát
    //Giá trị nhập vào tên bài hát
    //Kết quả trả về array(array('SONG_ID', 'SONG_NAME', 'SINGER_NAME', 'AUTHOR_NAME', 'GENRE_NAME', 'USER_NAME',
    //'song.VIEW', 'FAVORITE', 'DATE_UPLOAD', 'LYRICS', 'PATH'))
    public static function search_name($string=""){
        $chars = '%'.$string.'%';
        $columns = array('SONG_ID', 'SONG_NAME', 'song.SINGER_ID','SINGER_NAME', 'AUTHOR_NAME', 'GENRE_NAME', 'USER_NAME', 'song.VIEW', 'FAVORITE', 'DATE_UPLOAD', 'LYRICS', 'PATH');

        $query = DB::select_array($columns)->from('song');
        $query->join('singer')->on('song.SINGER_ID','=','singer.SINGER_ID');
        $query->join('author')->on('song.AUTHOR_ID','=','author.AUTHOR_ID');
        $query->join('genre')->on('song.GENRE_ID','=','genre.GENRE_ID');
        $query->join('user')->on('song.UPLOADER_ID','=','user.USER_ID');
        $query->where('SONG_NAME', 'like', $chars);

        return $query->execute()->as_array();
    }

    //Xóa bài hát theo mã bài hát
    //Giá trị nhập vào $song_id
    public static function delete_id($song_id){
        DB::delete('song')->where('SONG_ID', '=', $song_id)->execute();
    }

    //Lấy mã bài hát cuối cùng trong bảng
    public static function get_id_end(){
        $query = DB::select('SONG_ID')->from('song');
        $query->order_by('SONG_ID', 'desc');

        return $query->limit(1)->execute()->as_array();
    }

    //Chèn bài hát mới
    public static function insert($song){
        DB::insert('song')->set(array(
            'SONG_ID' => $song['SONG_ID'],
            'SONG_NAME' => $song['SONG_NAME'],
            'SINGER_ID' => $song['SINGER_ID'],
            'AUTHOR_ID' => $song['AUTHOR_ID'],
            'GENRE_ID' => $song['GENRE_ID'],
            'UPLOADER_ID' => $song['UPLOADER_ID'],
            'VIEW' => $song['VIEW'],
            'FAVORITE' => $song['FAVORITE'],
            'DATE_UPLOAD' => $song['DATE_UPLOAD'],
            'LYRICS' => $song['LYRICS'],
            'PATH' => $song['PATH'],
        ))->execute();
    }
}